/**
 * @description questionModel Service
 */

const {
  questionModel,
  UserModel
} = require('../db/index')
const Op = require('sequelize').Op

async function addData(params) {
  const result = await questionModel.create(params)
  const data = result.dataValues
  return data
}

/**
 * 
 * @param {string} username 用户名 
 */
async function getUserInfo(username) {
  // 查询条件
  const whereOption = {
    username
  }
  const result = await questionModel.findOne({
    where: whereOption
  })
  if (result === null) {
    return result
  }
  return result.dataValues
}

/**
 * 修改用户信息
 * @param {*} param0 要修改的用户信息
 * @param {*} param1 查询条件
 */
async function updateData(
  params,
  id
) {
  // 拼接修改内容
  const updateObj = params

  // 拼接查询条件
  const whereOption = {}
  if (id) {
    whereOption.id = id
  }

  // 执行修改
  const result = await questionModel.update(updateObj, {
    where: whereOption
  })
  return result[0] > 0
}

/**
 * 删除用户
 * @param {string} userid 用户id 
 */
async function deleteData(id) {
  const result = await questionModel.destroy({
    where: {
      id
    }
  })
  return result > 0
}

/**
 * 分页查询所有用户
 * @param {number} page 当前页码
 * @param {number} pageSize 每页条数
 */
async function queryAll(params) {
  const {
    page = 1,
    pageSize = 10,
    hard,
    type,
    key
  } = params
  if (page < 1) {
    page = 1
  }
  const whereOption = {}
  if (hard) {
    whereOption.hard = hard
  }
  if (type) {
    whereOption.type = type
  }
  if (key) {
    whereOption[Op.or] = [
      { name: { [Op.like]: `%${key}%` } },  
      { type: { [Op.like]: `%${key}%` } },
      { selections: { [Op.like]: `%${key}%` } },
      { score: { [Op.like]: `%${key}%` } },
    ];
  }
  const result = await questionModel.findAll({
    limit: pageSize,
    offset: (page - 1) * pageSize,
    where: whereOption
  })
  const total = await questionModel.findAll({
    where: whereOption
  })
  return {
    total: total.length || 0,
    data: result || []
  }

}

async function questionsById(params) {
  const {
    questions
  } = params
  let ids = questions.split(',').map(Number)
  let rs = []
  for await (let id of ids) {
    const result = await questionModel.findAll({
      where: {
        id
      }
    })
    rs.push(result)
  }
  return {
    data: rs || []
  }
}



module.exports = {
  addData,
  getUserInfo,
  updateData,
  deleteData,
  queryAll,
  questionsById
}